Una lista por comprensión (en inglés: list comprehension) es una expresión compacta para definir listas, conjuntos y diccionarios en Python.
Se trata de definir cada uno de los elementos sin tener que nombrar cada uno de ellos.
La forma general es:
[exp for val in <coleccion> if <condicion>]
Ejemplos:
In [1]:
m = [(1,2), (3,4), (5,6)]
# construir la lista que contiene el primer elemento de cada tupla de la lista m
# el resultado ha de ser [1,3,5]
lista = [ x for (x,y) in m ]
lista
Out[1]:
In [2]:
lista = [ y for (x,y) in m ]
lista
Out[2]:
In [3]:
lista = [ (x+y) for (x,y) in m ]
lista
Out[3]:
In [4]:
m = [(1,2), (3,4), (5,6)]
# construir la lista que contiene el cuadrado del segundo elemento de cada tupla
# de la lista m (solo sin son mayores que 2)
# el resultado ha de ser [16, 36]
lista_pow = [ y**2 for x,y in m if x > 2 ]
lista_pow
Out[4]:
In [5]:
lista_pow = [ (x**2, y**2) for x,y in m if x > 2 ]
lista_pow
Out[5]:
In [6]:
# Creación de una lista apartir de otra usando listas por comprensión
letras = ['a', 'b', 'g', 'h', 'n' ]
mayusculas = [ a.upper() for a in letras ]
mayusculas
# Creación de la misma lista usando un bucle FOR normal
# mayusculas
# letras = ['a', 'b', 'g', 'h', 'n' ]
# mayusculas = []
# for a in letras:
# mayusculas.append(a.upper())
# mayusculas
Out[6]:
In [7]:
# Para el caso de los diccionario tenemos que indicar clave y valor:
# Construcción de un diccionario
dic_mayusculas = { i : a.upper() for i,a in enumerate(letras) }
dic_mayusculas
Out[7]:
In [8]:
m = [(1,2), (3,4), (5,6)]
lista_pow = [ y**2 for x,y in m if x > 2 ]
dic_pow = { x : str(y**2) for x,y in m }
dic_pow
Out[8]:
In [ ]: